perm filename P2LOAD.FAI[SS,SYS]1 blob
sn#406948 filedate 1979-01-02 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 A B C D P ACWPRV JOBSAV JOBDDT P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG DEFNAM DEFPPN BUFIOW FILNAM EXT PDLEN PDL START SEMILP NOSEMI SEMICL NOPRG NOPPN OPENIT WIN WINOUT RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX NOACW NOFILE IOERR
C00010 ENDMK
C⊗;
;A B C D P ACWPRV JOBSAV JOBDDT P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG DEFNAM DEFPPN BUFIOW FILNAM EXT PDLEN PDL START SEMILP NOSEMI SEMICL NOPRG NOPPN OPENIT WIN WINOUT RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX NOACW NOFILE IOERR
TITLE P2LOAD PROGRAM TO LOAD P2SYS INTO P2 MEMORY
A←1
B←2
C←3
D←4
P←17
ACWPRV←←40
JOBSAV←←73 ;LAST LOCATION NOT SAVED IN DUMP FILE
JOBDDT←←74 ;LOCATION OF DDT'S ADDRESS
P2SORG←←200 ;FIRST LOCATION WE SHOULD LOAD FROM P2SYS FILE
P2LOOP←←101 ;HERE IS WHERE P2 WILL LOOP WAITING FOR US
P2NUM←←210 ;ZERO THIS TO TELL RUNNING P2 TO SHUT DOWN
HNGP2F←←212 ;SETOM THIS TO TELL P1 TO FLUSH ACTIVE P2 DEVICES
JOBSYM←←116 ;WHERE TO FIND SYMBOL TABLE POINTER
P2SIZE←←400 ;HOW MANY PAGES OF P2 CORE
OPDEF P2UUO [CALLI 400125] ;JUST UNTIL TOMORROW
NOREAD←←<P2SORG-JOBSAV>-1 ;NUMBER OF WORDS OF DMP FILE WE IGNORE
BUFLEN←←<NOREAD+177>&777600 ;LENGTH OF BUFFER WE READ INTO
BLTLEN←←BUFLEN-NOREAD ;HOW MANY WORDS WE HAVE TO BLT INTO P2 CORE
BUFFER: BLOCK BUFLEN ;HERE IS THE BUFFER
BLTORG←←BUFFER+NOREAD ;FIRST WORD WE CARE ABOUT
SAVORG←←BUFFER-<JOBSAV+1> ;ADDR X IN CORE IMAGE IS WORD SAVORG+X HERE
DEFNAM: SIXBIT /P2SYS DMP/
DEFPPN: SIXBIT / SSYS/
BUFIOW: IOWD BUFLEN,BUFFER
0
FILNAM: 0
EXT: 0
PDLEN←←10
PDL: BLOCK PDLEN
START: RESET
MOVE P,[IOWD PDLEN,PDL]
OUTSTR [ASCIZ /
/] ;STUPID MONITOR
MOVSI A,ACWPRV ;MUST BE ABLE TO WRITE P2 CORE
SETPRV A,
P2UUO 4, ;GET P2 MEMORY AS OUR UPPER
JRST NOACW
RESCAN ;LOOK FOR NONSTANDARD FILENAME
SEMILP: INCHSL A ;READ A CHAR SEARCHING FOR SEMICOLON
JRST NOSEMI ;NOTHING TO READ, USE STANDARD FILE
CAIN A,";"
JRST SEMICL ;GOT ONE, NOW READ FILENAME
CAIE A,175
CAIN A,12
JRST NOSEMI ;END OF LINE WITH NO SEMI
JRST SEMILP ;ELSE KEEP LOOKING
NOSEMI: DMOVE A,DEFNAM
MOVE D,DEFPPN
JRST OPENIT ;USE STANDARD FILENAME
SEMICL: PUSHJ P,GETWRD ;READ FILENAME
JUMPN B,.+2 ;MUST BE A FILENAME
MOVE B,DEFNAM ;ELSE WE USE THE DEFAULT
MOVEM B,FILNAM
MOVSI B,'DMP'
CAIN A,"." ;EXPLICIT EXTENSION?
PUSHJ P,GETWRD ;YES, READ IT
MOVEM B,EXT
MOVE D,DEFPPN ;DEFAULT PPN
CAIE A,"[" ;EXPLICIT PPN?
JRST NOPPN ;NO, USE STANDARD
MOVEI D,0
DSKPPN D, ;GET DEFAULT PPN
PUSHJ P,GETRT ;GET PRJ
JUMPE B,.+2 ; IF ANY
HRL D,B
CAIE A,"," ;EXPLICIT PRG?
JRST NOPRG ;NO
PUSHJ P,GETRT ;YES, READ IT
JUMPE B,.+2
HRR D,B
NOPRG: CAIN A,"]"
PUSHJ P,RSKPSP ;SKIP BRACKET IF ANY
NOPPN: CAIE A,12
JRST SYNTAX ;MUST END WITH CRLF
DMOVE A,FILNAM ;GET NAME AND EXT
OPENIT: INIT 17 ;OPEN THE DISK
'DSK '
0
JRST NOFILE
LOOKUP A ;FIND THE FILE
JRST NOFILE ;OOPS
SETZM 400000+P2NUM ;TELL P2 TO SHUT DOWN WHILE WE LOAD IT
SETOM 400000+HNGP2F ;TELL P1 TO SHUT DOWN ACTIVE P2 DEVICES
HLRES D ;NEGATIVE LENGTH OF FILE
IN BUFIOW ;READ FIRST PART OF FILE
JRST .+2 ;READ OK
JRST IOERR ;OOPS
MOVE A,[BLTORG,,400000+P2SORG]
BLT A,400000+P2SORG+BLTLEN-1
MOVEI A,<P2SIZE⊗9>-1 ;HIGHEST LOCATION IN P2 CORE
MOVEM A,400037 ;DDT JOBREL
MOVE A,SAVORG+JOBSYM ;JOBSYM FROM FILE
MOVEM A,400036 ;SAVE HERE FOR DDT
MOVE A,SAVORG+JOBDDT ;JOBDDT FROM FILE
MOVEM A,400000+JOBDDT ;SAVE FOR P2INI
HRLZI A,BUFLEN(D) ;LENGTH OF FILE TO GO
HRRI A,400000+P2SORG+BLTLEN-1
MOVEI B,0 ;END OF IOWD LIST
IN A ;READ REST DIRECTLY INTO P2 CORE
JRST WIN ;DONE!
OUTSTR [ASCIZ /Error in second part of read. Beware!
/]
EXIT
WIN: OUTSTR [ASCIZ /P2 loaded... /]
MOVE A,[JRST 204] ;SEND P2 TO P2INI
MOVEM A,400000+P2LOOP ;IT'S BEEN JRSTING POINT HERE
MOVEI A,2
SLEEP A, ;WAIT A WHILE
MOVE A,400000+P2NUM
MOVEI B,[ASCIZ /but needs to be started, at 204.
/]
JUMPE A,WINOUT
MOVEI B,[ASCIZ /and running.
/]
AOJE A,WINOUT
MOVEI B,[ASCIZ /but not with a P2 system!
/]
WINOUT: OUTSTR (B)
EXIT
RSKPSP: INCHWL A ;SKIP TO A REAL CHAR
SKIPSP: CAIN A,15 ;IGNORE CR
JRST RSKPSP
CAIE A,40 ;IGNORE SPACE
CAIN A,11 ;IGNORE TAB
JRST RSKPSP
POPJ P,
GETWRD: PUSHJ P,RSKPSP ;SKIP PUNCTUATION CHAR BEFORE READING NAME
MOVEI B,0
MOVE C,[POINT 6,B]
GETWR1: CAILE A,140
SUBI A,40 ;LC TO UC
CAIL A,"A" ;HO HUM
CAILE A,"Z"
JRST GETWR3
GETWR2: SUBI A,40
TRNN B,77
IDPB A,C
INCHWL A
JRST GETWR1
GETWR3: CAIL A,"0"
CAILE A,"9"
JRST SKIPSP
JRST GETWR2
GETRT: PUSHJ P,RSKPSP ;SKIP PUNCTUATION CHAR BEFORE READING NAME
MOVEI B,0
MOVE C,[POINT 6,B]
GETRT1: CAILE A,140
SUBI A,40 ;LC TO UC
CAIL A,"A" ;HO HUM
CAILE A,"Z"
JRST GETRT3
GETRT2: LSH B,6
ADDI B,-40(A)
INCHWL A
JRST GETRT1
GETRT3: CAIL A,"0"
CAILE A,"9"
JRST SKIPSP
JRST GETRT2
SYNTAX: CLRBFI ;SORRY
OUTSTR [ASCIZ /Error in filename, try again.
/]
EXIT
NOACW: OUTSTR [ASCIZ /Can't write P2 memory! (Maybe NOP2 set, maybe no ACW.)
/]
EXIT
NOFILE: OUTSTR [ASCIZ /Can't look up file!
/]
EXIT
IOERR: OUTSTR [ASCIZ /Error on first read. P2 core not modified.
/]
EXIT
END START